from pydantic import BaseModel, Field, validator
from typing import Optional

class DraftAddVideoRequest(BaseModel):
    """添加视频到草稿请求模型"""
    # 核心参数
    video_url: str = Field(..., description="视频链接")
    draft_folder: Optional[str] = Field(None, description="草稿文件夹路径")
    width: int = Field(1080, description="目标视频画布的宽度")
    height: int = Field(1920, description="目标视频画布的高度")
    start: float = Field(0, description="在目标轨道上的开始时间，单位秒")
    end: Optional[float] = Field(None, description="在目标轨道上的结束时间，单位秒")
    target_start: float = Field(0, description="视频在目标轨道上的起始时间，单位秒")
    draft_id: Optional[str] = Field(None, description="目标草稿的草稿id")
    # 变换参数
    transform_y: float = Field(0, description="垂直移动单位距离")
    scale_x: float = Field(1, description="水平方向缩放")
    scale_y: float = Field(1, description="垂直方向缩放")
    transform_x: float = Field(0, description="水平移动单位距离")
    # 视频播放参数
    speed: float = Field(1.0, description="播放速度，默认1.0")
    # 轨道参数
    track_name: str = Field("main", description="添加的轨道名称")
    relative_index: int = Field(0, description="轨道相对位置，越大越靠前")
    # 视频时长参数
    duration: Optional[float] = Field(None, description="视频时长参数")
    # 转场参数
    transition: Optional[str] = Field(None, description="转场类型")
    transition_duration: Optional[float] = Field(0.5, description="转场持续时间（秒）")
    # 蒙版相关参数
    mask_type: Optional[str] = Field(None, description="蒙版类型")
    mask_center_x: float = Field(0.5, description="蒙版中心X坐标（0-1）")
    mask_center_y: float = Field(0.5, description="蒙版中心Y坐标（0-1）")
    mask_size: float = Field(1.0, description="蒙版大小（0-1）")
    mask_rotation: float = Field(0.0, description="蒙版旋转角度（度）")
    mask_feather: float = Field(0.0, description="蒙版羽化级别（0-1）")
    mask_invert: bool = Field(False, description="是否反转蒙版")
    mask_rect_width: Optional[float] = Field(None, description="矩形蒙版宽度（仅矩形蒙版）")
    mask_round_corner: Optional[float] = Field(None, description="矩形蒙版圆角（仅矩形蒙版，0-100）")
    # 音频参数
    volume: float = Field(1.0, description="音量级别，默认1.0")
    # 背景参数
    background_blur: Optional[int] = Field(None,
                                           description="背景模糊级别，可选值：1（轻微）、2（中等）、3（强烈）、4（最大），默认None（无背景模糊）")
